package LogicaClasesNew;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name="productos")
public class Producto implements Serializable {
    //Al final era un kilombo hacerlo autogenerado, y lo dejamos asi.-->JAJAJA
    @XmlElement
    @Id
    private int NumRef;
    //El nombre del prod es unico, y no puede ser nulo.
    @XmlElement
    @Column(name = "Nombre", unique = true, nullable = false)
    private String Nombre;
    
    @XmlElement
    private String Descripcion;
    
    @XmlElement
    private String Especificacion;
    
    @XmlElement
    private float precio;
    //ACA HABRIA QUE ARREGLARLO Y PONER UN ONE TO ONE
    //@XmlElement
    @XmlTransient
    @OneToMany
    private List<Categoria> listacategorias;

    @XmlElement
    @Lob
    private byte[] Foto0;
    
    @XmlElement
    private byte[] Foto1;
    
    @XmlElement
    private byte[] Foto2;
    
    @XmlElement
    @JoinColumn(name="Nickname")
    private Proveedor proveedor;
    
   
    //*******FIN ATRIBUTOS***************
    
    //CONSTRUCTORES*******************************************************
    
    public Producto() {
    }

    public Producto(int NumRef, String Nombre, String Descripcion, String Especificacion, float precio, Proveedor proveedor) {
        this.NumRef = NumRef;
        this.Nombre = Nombre;
        this.Descripcion = Descripcion;
        this.Especificacion = Especificacion;
        this.precio = precio;
        this.proveedor = proveedor;
        this.listacategorias=new ArrayList<Categoria>();
    }
    
    public Producto(int NumRef, String Nombre, String Descripcion, String Especificacion, float precio, Proveedor proveedor, byte[] Foto0, byte[] Foto1, byte[] Foto2) {
        this.NumRef = NumRef;
        this.Nombre = Nombre;
        this.Descripcion = Descripcion;
        this.Especificacion = Especificacion;
        this.precio = precio;
        this.proveedor = proveedor;
        this.Foto0 = Foto0;
        this.Foto1 = Foto1;
        this.Foto2 = Foto2;
        this.listacategorias=new ArrayList<Categoria>();
        
    }
  
    
    //GETTERS Y SETTERS***************************************************
    
    public void setListacategorias(List<Categoria> listacategorias) {
        this.listacategorias = listacategorias;
    }

    public List<Categoria> getlistacategorias() {//Retorna el listado de todos las categorias
        return listacategorias;
    }
    
    public void addcategoria(Categoria c) { //Agregar una categoria al producto
        listacategorias.add(c);
    }
    
    public void removeProducto(Categoria c) { //quitar una categoria al producto
        listacategorias.remove(c);
    }
    
    public Proveedor getproveedor() {
        return proveedor; //retorna la instancia de proveedor asignada
    }
 
    public void setproveedor(Proveedor proveedor) {
        this.proveedor = proveedor; //seteo el proveedor del producto
    }
    
    public int getNumRef() {
        return NumRef;
    }

    public void setNumRef(int NumRef) {
        this.NumRef = NumRef;
    }

    public void setNombre(String Nombre) {
        this.Nombre = Nombre;
    }

    public void setDescripcion(String Descripcion) {
        this.Descripcion = Descripcion;
    }

    public void setEspecificacion(String Especificacion) {
        this.Especificacion = Especificacion;
    }

    public void setPrecio(float precio) {
        this.precio = precio;
    }


    public String getNombre() {
        return Nombre;
    }

    public String getDescripcion() {
        return Descripcion;
    }

    public String getEspecificacion() {
        return Especificacion;
    }

    public float getPrecio() {
        return precio;
    }

    public byte[] getFoto0() {
        return Foto0;
    }

    public void setFoto0(byte[] Foto0) {
        this.Foto0 = Foto0;
    }

    public byte[] getFoto1() {
        return Foto1;
    }

    public void setFoto1(byte[] Foto1) {
        this.Foto1 = Foto1;
    }

    public byte[] getFoto2() {
        return Foto2;
    }

    public void setFoto2(byte[] Foto2) {
        this.Foto2 = Foto2;
    }

   
 

    
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 29 * hash + this.NumRef;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Producto other = (Producto) obj;
        if (this.NumRef != other.NumRef) {
            return false;
        }
        if (!Objects.equals(this.Nombre, other.Nombre)) {
            return false;
        }
        if (!Objects.equals(this.Descripcion, other.Descripcion)) {
            return false;
        }
        if (!Objects.equals(this.Especificacion, other.Especificacion)) {
            return false;
        }
        return true;
    }

    
    
    @Override
    public String toString() {
        return "clases.Producto[ id=" + NumRef + " ]";
    }
    
}
